package com.bmf.core.exception;

import java.text.MessageFormat;

/**
 * 断言
 *
 * @author
 * @date 2022/10/07
 */
public interface Assert {


    /**
     * 获取返回信息
     *
     * @return 返回信息
     */
    String getMessage();


    /**
     * 断言是真， 如果不是  就报错
     *
     * @param expression       表达式
     * @param errorMsgTemplate 错误味精模板
     */
   static void isTrue(boolean expression, String errorMsgTemplate) {

        if (!expression){
            isError(errorMsgTemplate);
        }
    }

    /**
     * 断言是假  如果是真就报错
     *
     * @param expression       表达式
     * @param errorMsgTemplate 错误味精模板
     */
    static  void isFalse(boolean expression, String errorMsgTemplate) {
        isTrue(!expression,errorMsgTemplate);
    }
    /**
     * 直接错误处理
     *
     * @param errorMsgTemplate 错误味精模板
     */
    static void isError( String errorMsgTemplate) {
        throw new BaseException(errorMsgTemplate);
    }
    /**
     * 断言是真
     *
     * @param expression 表达式
     * @param args       arg游戏
     */
    default void assertIsTrue(boolean expression, Object... args) {
        if (!expression) {
            assertFail(args);
        }
    }


    /**
     * 断言是假
     *
     * @param expression 表达式
     * @param args       arg游戏
     */
    default void assertIsFalse(boolean expression, Object... args) {
        assertIsTrue(!expression,args);
    }

    /**
     * <p>直接抛出异常
     *
     */
    default void assertFail() {
        throw new BaseException(getMessage());
    }

    /**
     * 断言失败
     *
     * @param msg 味精
     */
    default void assertFail(String msg) {
        throw new BaseException(msg);
    }

    /**
     * 维护非空
     *
     * @param obj obj
     */
    default void assertNotNull(Object obj, Object... args) {
        if (null==obj) {
            assertFail(args);
        }
    }

    /**
     * 断言是真
     *
     * @param args arg游戏
     */
    default void assertFail(Object... args) {
        String msg = MessageFormat.format(getMessage(), args);
        throw new BaseException(msg);
    }
}
